<h2>泛型</h2>
Java中的泛型，只在编译阶段有效。在编译过程中，正确检验泛型结果后，会将泛型的相关信息擦出，并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。也就是说，泛型信息不会进入到运行时阶段。
{泛型类型在逻辑上是多个不同的类型，实际上都是相同的基本类型}
1.泛型类
    1.1 最典型的就是各种容器类，如：List、Set、Map
    1.2 注意：
        泛型的类型参数只能是类类型，不能是简单类型
        不能对确切的泛型类型使用instanceof操作，如下面的操作是非法的，编译时会出错。
        　　if(ex_num instanceof Generic<Number>){ }
2.泛型接口
    2.1
        /**
         * 未传入泛型实参时，与泛型类的定义相同，在声明类的时候，需将泛型的声明也一起加到类中
         * 即：class FruitGenerator<T> implements Generator<T>{
         * 如果不声明泛型，如：class FruitGenerator implements Generator<T>，编译器会报错："Unknown class"
         */
        class FruitGenerator<T> implements Generator<T>{
            @Override
            public T next() {
                return null;
            }
        }
    2.2
        /**
         * 传入泛型实参时：
         * 定义一个生产器实现这个接口,虽然我们只创建了一个泛型接口Generator<T>
         * 但是我们可以为T传入无数个实参，形成无数种类型的Generator接口。
         * 在实现类实现泛型接口时，如已将泛型类型传入实参类型，则所有使用泛型的地方都要替换成传入的实参类型
         * 即：Generator<T>，public T next();中的的T都要替换成传入的String类型。
         */
        public class FruitGenerator implements Generator<String> {

            private String[] fruits = new String[]{"Apple", "Banana", "Pear"};

            @Override
            public String next() {
                Random rand = new Random();
                return fruits[rand.nextInt(3)];
            }
        }
3.泛型通配符
    3.1 同一种泛型可以对应多个版本（因为参数类型是不确定的），不同版本的泛型类实例是不兼容的{Generic<Integer>不能被看作为`Generic<Number>的子类}
    3.2 类型通配符一般是使用？代替具体的类型实参，此处’？’是类型实参，而不是类型形参
      {重要说三遍！此处’？’是类型实参，而不是类型形参 ！ 此处’？’是类型实参，而不是类型形参 ！}
    3.3 再直白点的意思就是，此处的？和Number、String、Integer一样都是一种实际的类型，可以<I>{{把？看成所有类型的父类}}</I>
    3.4 当操作类型时，不需要使用类型的具体功能时，只使用Object类中的功能。那么可以用 ? 通配符来表未知类型

4.泛型方法
    4.1 泛型类，是在实例化类的时候指明泛型的具体类型；泛型方法，是在{调用}方法的时候指明泛型的具体类型
    4.2
        /**
         * 泛型方法的基本介绍
         * @param tClass 传入的泛型实参
         * @return T 返回值为T类型
         * 说明：
         *     1）public 与 返回值中间<T>非常重要，可以理解为声明此方法为泛型方法。
         *     2）只有声明了<T>的方法才是泛型方法，泛型类中的使用了泛型的成员方法并不是泛型方法。
         *     3）<T>表明该方法将使用泛型类型T，此时才可以在方法中使用泛型类型T。
         *     4）与泛型类的定义一样，此处T可以随便写为任意标识，常见的如T、E、K、V等形式的参数常用于表示泛型。
         */
        public <T> T genericMethod(Class<T> tClass)throws InstantiationException ,
          IllegalAccessException{
                T instance = tClass.newInstance();
                return instance;
        }

    4.3























